package com.atguigu.practice;

import java.util.HashMap;
import java.util.Map;

public class test3 {
    public static ListNode removeZeroSubList(ListNode head){
        Map<Integer,ListNode> map=new HashMap<>();
        ListNode cur=head;
        //遍历第一遍，先将每个节点的前缀和以及每个节点存入哈希表中
        int sum=0;
        while(cur!=null){
            sum+=cur.val;
            if(map.containsKey(sum)){
                ListNode tmp=map.get(sum);
                ListNode node=tmp.next;
                int dSum=sum;
                while(node!=cur){
                    dSum+=node.val;
                    map.remove(dSum);
                    node=node.next;
                }
                }
            else{
                map.put(sum,cur);
            }
            cur=cur.next;
        }
        ListNode node=head;
        for(Map.Entry<Integer, ListNode> entry:map.entrySet()){
            head.next=entry.getValue();
            head=entry.getValue();
        }
        return  node;
    }
    public static void main(String[] args) {
     ListNode head=new ListNode(1);
     head.next=new ListNode(2);
     head.next.next=new ListNode(-3);
     head.next.next.next=new ListNode(3);
     head.next.next.next.next=new ListNode(1);
     ListNode res=removeZeroSubList(head);
     while(res!=null){
         System.out.println(res.val);
         res=res.next;
     }
    }
}
